Field, Getter, Setter visibility কাস্টমাইজ করা

@JsonAutoDetect এবং Field Visibility - জ্যাকসন অ্যানোটেশন (Jackson Annotations) - Java Technologies

250

Jackson লাইব্রেরিতে, আপনি JSON Serialization এবং Deserialization প্রক্রিয়ায় field, getter, এবং setter-এর visibility কাস্টমাইজ করতে পারেন। এই কাস্টমাইজেশনটি কার্যকরী যখন আপনি চান যে কিছু ফিল্ড শুধুমাত্র getter বা setter এর মাধ্যমে দেখানো হোক বা অদৃশ্য থাকুক।

Jackson-এর কিছু অ্যানোটেশন এবং কনফিগারেশন আছে যা আপনাকে এই visibility কাস্টমাইজ করার সুযোগ দেয়।


Visibility কাস্টমাইজ করার জন্য Jackson এর অ্যানোটেশন এবং কনফিগারেশন:

  1. @JsonProperty: ফিল্ড বা মেথডের জন্য কাস্টম visibility নির্ধারণ করতে ব্যবহৃত হয়।
  2. @JsonIgnore: একটি ফিল্ড বা মেথডকে Serialization/Deserialization থেকে বাদ দিতে ব্যবহৃত হয়।
  3. @JsonAutoDetect: এটি ক্লাস বা ObjectMapper-এর ক্ষেত্রে getter, setter, field visibility কাস্টমাইজ করতে ব্যবহৃত হয়।
  4. @JsonInclude: JSON-এ কেবলমাত্র নির্দিষ্ট শর্তে ফিল্ডগুলো অন্তর্ভুক্ত করতে ব্যবহৃত হয়।

1. @JsonAutoDetect Annotation

@JsonAutoDetect অ্যানোটেশন ব্যবহার করে আপনি getter, setter, এবং field-এর visibility কাস্টমাইজ করতে পারেন। এটি ObjectMapper-এ global ভাবে ব্যবহার করা যেতে পারে, অথবা একটি নির্দিষ্ট ক্লাসে ব্যবহার করা যেতে পারে।

Visibility Levels:

  • JsonAutoDetect.Visibility.ANY: সকল ফিল্ড ও মেথড visible হবে।
  • JsonAutoDetect.Visibility.NON_PRIVATE: শুধুমাত্র public এবং protected ফিল্ড/মেথড visible হবে।
  • JsonAutoDetect.Visibility.PROTECTED_AND_PUBLIC: public এবং protected ফিল্ড/মেথড visible হবে।
  • JsonAutoDetect.Visibility.NONE: সব ফিল্ড এবং মেথড hidden থাকবে।

Example:

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
import com.fasterxml.jackson.databind.ObjectMapper;

@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NON_PRIVATE)
public class Person {
    private String name;  // Field will be included in JSON serialization

    private int age;  // Field will be included in JSON serialization

    private String address;  // Not visible in JSON

    public Person(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    // Getter and Setter for address are private, so this field will not be visible in JSON
}

Serialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonAutoDetectExample {
    public static void main(String[] args) throws Exception {
        Person person = new Person("John", 30, "1234 Elm St");

        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(person);

        System.out.println(json);
    }
}

JSON Output:

{
  "name": "John",
  "age": 30
}
  • এখানে, address ফিল্ডটি private থাকার কারণে JSON-এ অন্তর্ভুক্ত হয়নি, এবং getter মেথডটি NONE visibility-এ থাকায় name এবং age গেটারের মাধ্যমে serialization হয়েছে।

2. @JsonProperty Annotation

@JsonProperty ব্যবহার করে আপনি নির্দিষ্ট getter অথবা setter মেথডের visibility কাস্টমাইজ করতে পারেন। এটি একটি নির্দিষ্ট ফিল্ডের জন্য serialization এবং deserialization নিয়ন্ত্রণ করে।

Example:

import com.fasterxml.jackson.annotation.JsonProperty;

public class Person {
    private String name;

    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String password;

    public Person(String name, String password) {
        this.name = name;
        this.password = password;
    }

    @JsonProperty
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }
}

Serialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonPropertyExample {
    public static void main(String[] args) throws Exception {
        Person person = new Person("John", "password123");

        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(person);

        System.out.println(json);
    }
}

JSON Output:

{
  "name": "John"
}
  • এখানে, password ফিল্ডটি WRITE_ONLY visibility-এ সেট করা হয়েছে, যার ফলে serialization সময় password ফিল্ডটি JSON-এ অন্তর্ভুক্ত হয়নি, তবে deserialization সময় তা কাজ করবে।

3. @JsonInclude Annotation

@JsonInclude অ্যানোটেশন JSON serialization-এর সময় কিছু ফিল্ড বাদ দিতে ব্যবহৃত হয়, উদাহরণস্বরূপ null বা empty values। আপনি JsonInclude.Include.NON_NULL বা JsonInclude.Include.NON_EMPTY ব্যবহার করতে পারেন।

Example:

import com.fasterxml.jackson.annotation.JsonInclude;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Person {
    private String name;
    private String address;

    public Person(String name, String address) {
        this.name = name;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public String getAddress() {
        return address;
    }
}

Serialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonIncludeExample {
    public static void main(String[] args) throws Exception {
        Person person = new Person("John", null);

        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(person);

        System.out.println(json);
    }
}

JSON Output:

{
  "name": "John"
}
  • এখানে, address ফিল্ডটি null হওয়ায় সেটি JSON-এ অন্তর্ভুক্ত হয়নি, কারণ @JsonInclude(JsonInclude.Include.NON_NULL) ব্যবহার করা হয়েছে।

4. @JsonIgnore Annotation

@JsonIgnore অ্যানোটেশনটি একটি ফিল্ড বা মেথডকে Serialization এবং Deserialization থেকে বাদ দেয়। এটি তখন ব্যবহৃত হয় যখন কোনো নির্দিষ্ট ফিল্ড JSON-এ শো করতে না চান।

Example:

import com.fasterxml.jackson.annotation.JsonIgnore;

public class Person {
    private String name;

    @JsonIgnore
    private String password;

    public Person(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }
}

Serialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonIgnoreExample {
    public static void main(String[] args) throws Exception {
        Person person = new Person("John", "password123");

        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(person);

        System.out.println(json);
    }
}

JSON Output:

{
  "name": "John"
}
  • এখানে, password ফিল্ডটি @JsonIgnore ব্যবহার করার কারণে JSON-এ অন্তর্ভুক্ত হয়নি।

  1. @JsonAutoDetect অ্যানোটেশনটি ফিল্ড, getter, এবং setter visibility কাস্টমাইজ করতে ব্যবহৃত হয়।
  2. @JsonProperty ব্যবহার করে ফিল্ড বা মেথডের visibility নিয়ন্ত্রণ করা যায়।
  3. @JsonInclude এবং @JsonIgnore JSON Serialization নিয়ন্ত্রণে সহায়তা করে।
  4. Visibility Control ব্যবহার করে আপনি JSON আউটপুট পরিষ্কার এবং কাস্টমাইজড করতে পারেন, যা API এর জন্য উপকারী।

Jackson-এর এই অ্যানোটেশনগুলো ব্যবহার করে আপনি JSON Serialization এবং Deserialization আরও ফ্লেক্সিবল এবং দক্ষভাবে কাস্টমাইজ করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...